package ace.module.mail.address.core.impl.service;

import ace.cmp.core.model.PageResultDto;
import ace.module.common.api.model.input.TenantAndAppTypeInput;
import ace.module.common.api.model.input.TenantInput;
import ace.module.common.api.model.input.TenantPageInput;
import ace.module.mail.address.api.model.dto.MadMailAddressDto;
import ace.module.mail.address.api.model.input.mailaddress.MadMailAddressAddInput;
import ace.module.mail.address.api.model.input.mailaddress.MadMailAddressAddItemInput;
import ace.module.mail.address.api.model.input.mailaddress.MadMailAddressAdminFilterInput;
import ace.module.mail.address.api.model.input.mailaddress.MadMailAddressModifyInput;
import ace.module.mail.address.api.model.input.mailaddress.MadMailAddressModifyItemInput;
import ace.module.mail.address.api.model.input.mailaddress.MadMailAddressSearchInput;
import java.util.List;
import org.springframework.data.domain.Page;

/**
 * .
 *
 * @author Caspar
 */
public interface MadMailAddressService {

  PageResultDto<MadMailAddressDto> search(MadMailAddressSearchInput input);

  Long addByAppOutId(MadMailAddressAddInput input);

  void modifyByAppOutId(MadMailAddressModifyInput input);

  MadMailAddressDto getByTenantAndAppTypeAndId(TenantAndAppTypeInput<Long> input);

  Page<MadMailAddressDto> adminSearchInMemberScope(
      TenantPageInput<MadMailAddressAdminFilterInput> tenantPageInput);

  Long adminAddMemberScope(TenantInput<MadMailAddressAddItemInput> input);

  void modify(TenantInput<MadMailAddressModifyItemInput> input);

  void remove(List<Long> ids);

  MadMailAddressDto get(TenantInput<Long> input);
}
